package com.example.springboot.init;

import com.example.springboot.filter.CustomFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.Filter;
import javax.servlet.annotation.WebFilter;

/**
 * Filter注入容器中的方式 通过 FilterRegistrationBean 手动注册
 * <p> 1. 通过 {@link FilterRegistrationBean }  手动注册
 * <p> 2. 通过 {@link WebFilter } 和 {@link ServletComponentScan } 配合扫描注册
 * <p> 注意： 这两种方式不能同时对一个Filter使用，会出现重复执行
 * <p>
 * @author Zhang.Z
 * @version 2025-09-20
 */
@Configuration
@ServletComponentScan(basePackages = {"com.example.springboot.filter"}) //扫描带有@WebFilter过滤器
public class FilterConfig {


    /**
     * 适用于需要控制 执行顺序、URL 匹配模式 的情况
     */
    @Bean
    FilterRegistrationBean<Filter> customFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setName("customFilter");
        registration.setFilter(new CustomFilter());

        // 拦截所有请求
        registration.addUrlPatterns("/*");

        // 执行顺序，越小越先执行
        registration.setOrder(1);
        return registration;
    }

}
